|
From: <fab...@us...> - 2010-10-12 17:25:38
|
Revision: 5246
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5246&view=rev
Author: fabiomaulo
Date: 2010-10-12 17:25:31 +0000 (Tue, 12 Oct 2010)
Log Message:
-----------
Apply NH-2342 XDocument support and System.Xml.Linq reference :((
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/XDocType.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml
trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-12 16:15:16 UTC (rev 5245)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-12 17:25:31 UTC (rev 5246)
@@ -67,6 +67,9 @@
<HintPath>..\..\lib\net\3.5\Remotion.Data.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
+ <Reference Include="System.Xml.Linq">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="ADOException.cs" />
@@ -861,6 +864,7 @@
<Compile Include="Type\LocalDateTimeType.cs" />
<Compile Include="Type\UriType.cs" />
<Compile Include="Type\UtcDateTimeType.cs" />
+ <Compile Include="Type\XDocType.cs" />
<Compile Include="Type\XmlDocType.cs" />
<Compile Include="Util\ExpressionsHelper.cs" />
<Compile Include="Util\NullableDictionary.cs" />
Modified: trunk/nhibernate/src/NHibernate/NHibernateUtil.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-12 16:15:16 UTC (rev 5245)
+++ trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-12 17:25:31 UTC (rev 5246)
@@ -283,6 +283,8 @@
public static readonly NullableType XmlDoc = new XmlDocType();
+ public static readonly NullableType XDoc = new XDocType();
+
public static readonly NullableType Uri = new UriType();
/// <summary>
Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-12 16:15:16 UTC (rev 5245)
+++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-12 17:25:31 UTC (rev 5246)
@@ -4,6 +4,7 @@
using System.Globalization;
using System.Reflection;
using System.Xml;
+using System.Xml.Linq;
using NHibernate.Bytecode;
using NHibernate.Classic;
using NHibernate.Engine;
@@ -211,6 +212,8 @@
RegisterType(typeof (Uri), NHibernateUtil.Uri, new[] {"uri", "url"});
+ RegisterType(typeof(XDocument), NHibernateUtil.XDoc, new[] { "xdoc", "xdocument" });
+
// object needs to have both class and serializable setup before it can
// be created.
RegisterType(typeof (Object), NHibernateUtil.Object, new[] {"object"});
Added: trunk/nhibernate/src/NHibernate/Type/XDocType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/XDocType.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Type/XDocType.cs 2010-10-12 17:25:31 UTC (rev 5246)
@@ -0,0 +1,85 @@
+using System;
+using System.Data;
+using System.Xml.Linq;
+using NHibernate.SqlTypes;
+
+namespace NHibernate.Type
+{
+ [Serializable]
+ public class XDocType : MutableType
+ {
+ public XDocType()
+ : base(new XmlSqlType())
+ {
+ }
+
+ public XDocType(SqlType sqlType)
+ : base(sqlType)
+ {
+ }
+
+ public override string Name
+ {
+ get { return "XDoc"; }
+ }
+
+ public override System.Type ReturnedClass
+ {
+ get { return typeof (XDocument); }
+ }
+
+ public override void Set(IDbCommand cmd, object value, int index)
+ {
+ ((IDataParameter) cmd.Parameters[index]).Value = ((XDocument) value).ToString(SaveOptions.DisableFormatting);
+ }
+
+ public override object Get(IDataReader rs, int index)
+ {
+ // according to documentation, GetValue should return a string, at list for MsSQL
+ // hopefully all DataProvider has the same behaviour
+ string xmlString = Convert.ToString(rs.GetValue(index));
+ return FromStringValue(xmlString);
+ }
+
+ public override object Get(IDataReader rs, string name)
+ {
+ return Get(rs, rs.GetOrdinal(name));
+ }
+
+ public override string ToString(object val)
+ {
+ return val == null ? null : val.ToString();
+ }
+
+ public override object FromStringValue(string xml)
+ {
+ if (xml != null)
+ {
+ return XDocument.Parse(xml);
+ }
+
+ return null;
+ }
+
+ public override object DeepCopyNotNull(object value)
+ {
+ var original = (XDocument) value;
+ var copy = new XDocument(original);
+ return copy;
+ }
+
+ public override bool IsEqual(object x, object y)
+ {
+ if (x == null && y == null)
+ {
+ return true;
+ }
+ if (x == null || y == null)
+ {
+ return false;
+ }
+
+ return XNode.DeepEquals((XDocument) x, (XDocument) y);
+ }
+ }
+}
\ 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-12 16:15:16 UTC (rev 5245)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 17:25:31 UTC (rev 5246)
@@ -80,6 +80,9 @@
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Xml" />
+ <Reference Include="System.Xml.Linq">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Ado\AlmostSimple.cs" />
@@ -538,6 +541,8 @@
<Compile Include="TypesTest\UriClass.cs" />
<Compile Include="TypesTest\UriTypeFixture.cs" />
<Compile Include="TypesTest\UtcDateTimeTypeFixture.cs" />
+ <Compile Include="TypesTest\XDocClass.cs" />
+ <Compile Include="TypesTest\XDocTypeFixture.cs" />
<Compile Include="TypesTest\XmlDocClass.cs" />
<Compile Include="TypesTest\XmlDocTypeFixture.cs" />
<Compile Include="UtilityTest\ReflectionHelperIsMethodOfTests.cs" />
@@ -2329,6 +2334,7 @@
<EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" />
<EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="TypesTest\XDocClass.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2374\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2328\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2313\Mappings.hbm.xml" />
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs 2010-10-12 17:25:31 UTC (rev 5246)
@@ -0,0 +1,11 @@
+using System.Xml.Linq;
+
+namespace NHibernate.Test.TypesTest
+{
+ public class XDocClass
+ {
+ public int Id { get; set; }
+ public XDocument Document { get; set; }
+ public XDocument AutoDocument { get; set; }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml 2010-10-12 17:25:31 UTC (rev 5246)
@@ -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.XDocClass, NHibernate.Test" table="nh_xdoc">
+ <id name="Id" column="id">
+ <generator class="assigned" />
+ </id>
+
+ <property name="Document" type="XDoc" />
+ <property name="AutoDocument" />
+ </class>
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs 2010-10-12 17:25:31 UTC (rev 5246)
@@ -0,0 +1,76 @@
+using System.Xml.Linq;
+using NHibernate.Type;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.TypesTest
+{
+ [TestFixture]
+ public class XDocTypeFixture : TypeFixtureBase
+ {
+ protected override string TypeName
+ {
+ get { return "XDoc"; }
+ }
+
+ [Test]
+ public void ReadWrite()
+ {
+ using (var s = OpenSession())
+ {
+ var docEntity = new XDocClass {Id = 1 };
+ docEntity.Document = XDocument.Parse("<MyNode>my Text</MyNode>");
+ s.Save(docEntity);
+ s.Flush();
+ }
+
+ using (var s = OpenSession())
+ {
+ var docEntity = s.Get<XDocClass>(1);
+ var document = docEntity.Document;
+ document.Should().Not.Be.Null();
+ document.Document.Root.ToString(SaveOptions.DisableFormatting).Should().Contain("<MyNode>my Text</MyNode>");
+ var xmlElement = new XElement("Pizza", new XAttribute("temp", "calda"));
+ document.Document.Root.Add(xmlElement);
+ s.Save(docEntity);
+ s.Flush();
+ }
+ using (var s = OpenSession())
+ {
+ var docEntity = s.Get<XDocClass>(1);
+ var document = docEntity.Document;
+ document.Document.Root.ToString(SaveOptions.DisableFormatting).Should().Contain("Pizza temp=\"calda\"");
+ s.Delete(docEntity);
+ s.Flush();
+ }
+ }
+
+ [Test]
+ public void InsertNullValue()
+ {
+ using (ISession s = OpenSession())
+ {
+ var docEntity = new XDocClass { Id = 1 };
+ docEntity.Document = null;
+ s.Save(docEntity);
+ s.Flush();
+ }
+
+ using (ISession s = OpenSession())
+ {
+ var docEntity = s.Get<XDocClass>(1);
+ docEntity.Document.Should().Be.Null();
+ s.Delete(docEntity);
+ s.Flush();
+ }
+ }
+
+ [Test]
+ public void AutoDiscoverFromNetType()
+ {
+ // integration test to be 100% sure
+ var propertyType = sessions.GetEntityPersister(typeof (XDocClass).FullName).GetPropertyType("AutoDocument");
+ propertyType.Should().Be.InstanceOf<XDocType>();
+ }
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|